﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading;
using Picea.Modelo;
using System.Data.SqlClient;
using System.Data.SqlServerCe;

namespace Picea.Data
{
   public class ClienteDAO  
    {

       public int InserirCliente(Cliente cliente)
       {
           int idEndereco = 0;
           string sqlCliCommand = "SELECT idCliente FROM TB_CLIENTES WHERE stTelefone = " + cliente.StTelefone;
           int codRetorno = 0;

           using (SqlCeDataReader reader = SqlHelper.ExecuteReader(SqlHelper.PiceaConnection, sqlCliCommand))
           {
               if(reader.Read())
               {
                   codRetorno = 1; // telefone já cadastrado;
               }
           }
           if (codRetorno == 0)
           {

               sqlCliCommand = "INSERT INTO TB_CLIENTES (stTelefone, stNome, idEndereco) VALUES" +
                                      "('{telefone}','{nome}','{idEndereco}');";

               idEndereco = InserirEndereco(cliente.endereco);

               sqlCliCommand = sqlCliCommand.Replace("{telefone}", cliente.StTelefone).Replace(
                   "{nome}", cliente.StNome).Replace(
                       "{idEndereco}", idEndereco.ToString());


               int nLinhasAfetadas = SqlHelper.ExecuteNonQuery(SqlHelper.PiceaConnection, sqlCliCommand);
           }
           return codRetorno;
      
       }

       private string RetornaTipoLogradouro(int idTipoLogradouro)
       {
           string sql = "SELECT stTipoLogradouro FROM TB_TIPO_LOGRADOURO WHERE idTipoLogradouro = " + idTipoLogradouro.ToString();
           string sTipoLogradouro = string.Empty;
           using (SqlCeDataReader reader = SqlHelper.ExecuteReader(SqlHelper.PiceaConnection, sql))
           {
               if (reader.Read())
               {
                   sTipoLogradouro = reader["stTipoLogradouro"].ToString();
               }
           }
           return sTipoLogradouro;
       }

       private int InserirEndereco(Endereco endereco)
       {
           int idEndereco = 0;
           string sqlEndCommand = "INSERT INTO TB_ENDERECOS (stNomeLogradouro, idTipoLogradouro," +
                                  "stNumeroResidencia, stComplemento, stBairro, stCidade, txtObservacoes)" +
                                  " VALUES ('{nomeLogradouro}',{idTipoLogradouro}," +
                                  "'{stNum}','{stComplemento}','{stBairro}','{stCidade}'," +
                                  "'{stObservacoes}');";
           sqlEndCommand = sqlEndCommand.Replace(
               "{nomeLogradouro}", endereco.StNomeLogradouro).Replace(
               "{idTipoLogradouro}", endereco.IdTipoLogradouro.ToString()).Replace(
               "{stNum}", endereco.StNumResidencia).Replace(
               "{stComplemento}", endereco.StComplemento).Replace(
               "{stBairro}", endereco.Bairro).Replace(
               "{stCidade}", endereco.Cidade).Replace(
               "{stObservacoes}", endereco.StObservacoes);

            int ilinhasAfetadas = SqlHelper.ExecuteNonQuery(SqlHelper.PiceaConnection, sqlEndCommand);

           if (ilinhasAfetadas > 0)
           {
               sqlEndCommand = "SELECT TOP(1) idEndereco FROM TB_ENDERECOS order by idEndereco desc";
               SqlCeDataReader reader = (SqlHelper.ExecuteReader(SqlHelper.PiceaConnection, sqlEndCommand));
               if (reader.Read())
               {
                   idEndereco = Convert.ToInt32(reader[0]);
               }
           }
           return idEndereco;

       }

       public Cliente RetornarClientePorTelefone(string sTelefone)
       {
           string sql = "SELECT cli.idCliente, cli.stTelefone, cli.stNome, en.idEndereco,"
                + "tpl.idTipoLogradouro, tpl.stTipoLogradouro,	stNomeLogradouro, stNumeroResidencia, "
                + "stComplemento, stBairro,stCidade, txtObservacoes FROM TB_CLIENTES AS cli WITH (NOLOCK) "
                + "INNER JOIN TB_ENDERECOS AS en WITH (NOLOCK) ON cli.idEndereco = en.idEndereco LEFT JOIN  "
                + "TB_TIPO_LOGRADOURO AS  tpl WITH (NOLOCK) ON en.idTipoLogradouro = tpl.idTipoLogradouro "
                + "WHERE cli.stTelefone = " + sTelefone;
           
           Cliente cli = new Cliente();
           
           using(SqlCeDataReader reader = SqlHelper.ExecuteReader(SqlHelper.PiceaConnection, sql))
           {
               if(reader.Read())
               {
                   cli.IdCliente = Convert.ToInt32(reader["idCliente"]);
                   cli.StNome = reader["stNome"].ToString();
                   cli.StTelefone = reader["stTelefone"].ToString();
                   cli.StNome = reader["stNome"].ToString();
                   cli.IdEndereco = 
                       cli.endereco.IdEndereco = Convert.ToInt32(reader["idEndereco"]);
                   cli.endereco.StNomeLogradouro = reader["stNomeLogradouro"].ToString();
                   cli.endereco.StNumResidencia = reader["stNumeroResidencia"].ToString();
                   cli.endereco.StComplemento = reader["stComplemento"].ToString();
                   cli.endereco.Bairro = reader["stBairro"].ToString();
                   cli.endereco.Cidade = reader["stCidade"].ToString();
                   cli.endereco.StObservacoes = reader["txtObservacoes"].ToString();
                   cli.endereco.IdTipoLogradouro = Convert.ToInt32(reader["idTipoLOgradouro"]);

               }
           }
           return cli;
       }
    }
}
